package OutputStream;

import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.ObjectOutputStream;
import java.io.Serializable;

/**
 * @author 王艺锡
 * @version 1.0
 * 对象流,处理流
 * ObjectOutputStream
 * 可以写入数据和数据类型
 */
public class ObjectOutputStream_ {
    public static void main(String[] args) throws Exception {
        //序列化:序列化就是在保存数据时，保存数据的值和数据类型
        //反序列化:反序列化就是在恢复数据的时候，恢复数据的值和数据类型
        //如果想要让对象是可序列化的，则需要实现两个接口之一
        //1.Serializable    常用  ->标记接口，没有方法
        //2.Externalizable  不常用 ->该接口有方法需要实现

        String filePath = "e:\\data.txt";
        //创建ObjectOutputStream对象，传入一个字节流对象
        ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream(filePath));
        oos.writeInt(100);//int ->Integer
        oos.writeBoolean(false);//boolean ->Boolean
        oos.writeChar('w');//char -> Char
        oos.writeDouble(7.2);//double ->Double
        oos.writeUTF("幸运!");//String

        //写入一个Dog对象,Dog类必须实现Serializable接口,并且Dog类里边的属性也要都实现了Serializable接口
        oos.writeObject(new Dog("大黄",3));
        oos.close();
        System.out.println("写入成功!");

    }
}
class Dog implements Serializable {
    private String name;
    private int age;

    public Dog(String name, int age) {
        this.name = name;
        this.age = age;
    }

    @Override
    public String toString() {
        return "Dog{" +
                "name='" + name + '\'' +
                ", age=" + age +
                '}';
    }
}
